package com.feicheng.lanniao.controller;


//import org.omg.CORBA.SystemException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.feicheng.lanniao.entity.Permission;
import com.feicheng.lanniao.exception.SystemException;
import com.feicheng.lanniao.result.ResultInfo;
import com.feicheng.lanniao.service.IPermissionService;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author cailongyang
 * @since 2021-07-13
 */
@RestController
@RequestMapping("/subscribe/permission")
public class PermissionController {

	@Autowired
	IPermissionService iPermissionService;
	
	/**
	 * 権限IDに基づいて権限を削除する
	 * @param permissionId
	 * @return 削除操作は成功したか
	 */
	@DeleteMapping("/info")
	@Transactional
	public ResultInfo deletePermissionInfo(Integer permissionId) {
		
		if (null == permissionId) {
			throw new SystemException("权限ID缺失");
		}
		
		return ResultInfo.success(iPermissionService.deletePermissionInfo(permissionId));
	}
	
	
	/**
	 * 権限を追加する
	 * @param permission
	 * @return 追加操作は成功したか
	 */
	@PostMapping("/info")
	public ResultInfo addPermissionInfo(Permission permission) {
		//permissionId必须为空
		//permissionIdはnullでなければならない
		if (null != permission.getPermissionId()) {
			throw new SystemException("权限ID错误");
		}
		//必须有name
		//nameが必要です
		if (!StringUtils.hasLength(permission.getName())) {
			throw new SystemException("权限名称缺失");
		}
		//必须有父级权限
		//親パーミッションが必要です
		if (null == permission.getpId()) {
			throw new SystemException("父级权限ID缺失");
		} 
		//如果父级权限为0, 则权限路径被设置为空字符串
		//親パーミッションが0の場合、パーミッションパスを空の文字列に割り当てる
		else if (permission.getpId() == 0) {
			permission.setPath("");
		} 
		//如果父级权限为非0的数, 且权限路径为空字符串或为空, 则抛出异常
		//親パーミッションがゼロ以外の数値で、パーミッションパスが空の文字列またはNULLの場合、例外をスローする
		else {
			if (!StringUtils.hasLength(permission.getPath())) {
				throw new SystemException("权限路径缺失");
			}
		}
		
		return ResultInfo.success(iPermissionService.addPermissionInfo(permission));
	}
	

	/**
	 * 権限を更新する
	 * @param permission
	 * @return 更新操作は成功したか
	 */
	@PutMapping("/info")
	public ResultInfo updatePermissionInfo(Permission permission) {
		if (null == permission.getPermissionId()) {
			throw new SystemException("权限ID缺失");
		}
		
		return ResultInfo.success(iPermissionService.updatePermissionInfo(permission));
	}
	
	/**
	 * 権限IDに基づいて権限を検索する
	 * @param permissionId
	 * @return 検索された権限
	 */
	@GetMapping("/info")
	public ResultInfo getPermissionInfo(Integer permissionId) {
		if (null == permissionId) {
			throw new SystemException("权限ID缺失");
		}
		return iPermissionService.getPermissionInfo(permissionId);
	}
	
	/**
	 * パラメータに基づいて権限を検索する、パラメータがない場合は、すべての権限を検索する
	 * @param name
	 * @param path
	 * @param statu
	 * @param pId
	 * @param currentPage
	 * @param pageSize
	 * @return ページ付けされた検索結果
	 */
	@GetMapping("/list")
	public ResultInfo getPermissionList(
			String name,
			String path,
			Boolean statu,
			Integer pId,
			@RequestParam(defaultValue="1") Integer currentPage,
			@RequestParam(defaultValue="10")Integer pageSize
			) {
		return iPermissionService.getPermissionList(name, path, statu, pId, currentPage, pageSize);
	}
	
	/**
	 * すべての権限を検索する
	 * @return 検索された権限
	 */
	@GetMapping("/all")
	public ResultInfo allPermissions() {
		return iPermissionService.allPermissions();
	}

}
